import axios from "axios";
import { tansParams } from "./tools";
import cache from "@/plugins/cache";
import Cookies from "js-cookie";
const TokenKey = 'Admin-Token'
const getToken=()=>{
    return Cookies.get(TokenKey)
}
const setToken=(token:string)=>{
    return Cookies.set(TokenKey, token)
  }
  
const removeToken=()=>{
    return Cookies.remove(TokenKey)
  }
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
    headers:{
      'Content-Type':'multipart/form-data'
    },
    // axios中请求配置有baseURL选项，表示请求URL公共部分
    baseURL: process.env.VUE_APP_BASE_API,
    //baseURL:'http://localhost/',
    // 超时
    timeout: 10000
})
// request拦截器
service.interceptors.request.use(config => {
    // 是否需要设置 token
    const isToken=false
    /*if(config.headers){
      isToken=config.headers.isToken === false
    }*/
    //const isToken = (config.headers || {}).isToken === false
    // 是否需要防止数据重复提交
    const isRepeatSubmit=true
    /*if(config.headers){
      isRepeatSubmit=config.headers.repeatSubmit === false
    }*/
    //const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
    if (getToken() && isToken) {
      //config.headers['token'] = 'Bearer-' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
      config.headers[TokenKey] = getToken()
    }
    // get请求映射params参数
    if (config.method === 'get' && config.params) {
      let url = config.url + '?' + tansParams(config.params);
      url = url.slice(0, -1);
      config.params = {};
      config.url = url;
    }
    if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
      const requestObj = {
        url: config.url,
        data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
        time: new Date().getTime()
      }
      const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小
      const limitSize = 5 * 1024 * 1024; // 限制存放数据5M
      if (requestSize >= limitSize) {
        console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制，无法进行防重复提交验证。')
        return config;
      }
      const sessionObj = cache.session.getJSON('sessionObj')
      if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
        cache.session.setJSON('sessionObj', requestObj)
      } else {
        const s_url = sessionObj.url;                // 请求地址
        const s_data = sessionObj.data;              // 请求数据
        const s_time = sessionObj.time;              // 请求时间
        const interval = 1000;                       // 间隔时间(ms)，小于此时间视为重复提交
        if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
          const message = '数据正在处理，请勿重复提交';
          console.warn(`[${s_url}]: ` + message)
          return Promise.reject(new Error(message))
        } else {
          cache.session.setJSON('sessionObj', requestObj)
        }
      }
    }
    return config
  }, error => {
      Promise.reject(error)
  })
// response拦截器
service.interceptors.response.use(response => {
    //console.log(response.headers)
    if (response.data.StatusCode === 'token_failure') {
      // 401 清除token信息并跳转登录页面
      removeToken()
      //
      // 跳转登录页面，并将要浏览的页面完整URL作为跳转后登录页面的返回页面
      location.href = '#/login?redirect=' + encodeURIComponent(location.href)
    }
    //console.log(response.headers['admin-token'])
    if(response.headers['admin-token']){
      setToken(response.headers['admin-token'])
    }
    return response
  }, error => {
    Promise.reject(error)
  })
export {
  getToken,
  removeToken,
  service
}